package com.itheima.health.dao;

import com.github.pagehelper.Page;
import com.itheima.health.pojo.Menu;
import com.itheima.health.pojo.Permission;
import com.itheima.health.pojo.Role;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 角色DAO
 */
public interface RoleDao {
    /**
     * 根据用户ID查询
     * @param userId
     * @return
     */
    List<Role> selectByUserId(@Param("userId") Integer userId);

    /**
     * 查询角色信息
     * @param queryString
     * @return
     */
    Page<Role> selectByCondition(@Param("queryString") String queryString);

    /**
     * 查所有权限
     * @return
     */
    List<Permission> findAllPermission();

    /**
     * 查所有菜单
     * @return
     */
    List<Menu> findAllMenu();

    /**
     * 新增角色基本信息
     * @param role
     */
    void insert(Role role);

    /**
     * 添加角色菜单关系表
     * @param id
     * @param menuId
     */
    void insertRoleAndMenu(@Param("id") Integer id, @Param("menuId") Integer menuId);

    /**
     * 添加角色权限关系表数据
     * @param id
     * @param permissionId
     */
    void insertRoleAndPermission(@Param("id") Integer id, @Param("permission") Integer permissionId);

    /**
     * 角色编辑之角色回显
     * @param id
     * @return
     */
    Role selectByRoleId(@Param("id") Integer id);


    /**
     * 角色编辑之权限回显
     * @param id
     * @return
     */
    List<Integer> findAllPermissionByRoleId(@Param("id") Integer id);

    /**
     * 角色编辑之菜单回显
     * @param id
     * @return
     */
    List<Integer> findAllMenuByRoleId(@Param("id") Integer id);

    /**
     * 关系角色
     * @param role
     */
    void updata(Role role);

    /**
     * 删除角色权限旧关系
     * @param id
     */
    void delectRole_permissionByRoleId(@Param("id") Integer id);

    /**
     * 删除角色菜单旧关系
     * @param id
     */
    void delectMenuByRoleId(@Param("id") Integer id);

    /**
     * 删除角色
     * @param id
     */
    void delete(@Param("id") Integer id);

    /**
     * 查当前角色下有没有用户
     * @param id
     * @return
     */
    Long countUserByRoleId(@Param("id") Integer id);

    /**
     * 查父菜单下的子菜单
     * @param menuId
     * @return
     */
    List<Integer> findZiId(@Param("menuId") Integer menuId);

    /**
     * 查父菜单
     * @param menuId
     * @return
     */
    Integer findFuId(@Param("menuId") Integer menuId);


    /**
     * 查这个父菜单是否已经存在与关系表中
     * @param id
     * @param i
     * @return
     */
    Long findExist(@Param("id") Integer id, @Param("i") Integer i);

    void insertRoles(@Param("roles") String roles, @Param("id") Integer id);

    List<Role> findAllRole();

    void insertRoles(Role roles);

    void updateRoles(@Param("userId") Integer userId, @Param("roles") Integer roles);

}
